package com.bonshotels.DomainLayer.CtrlDades;

import java.util.Set;

import com.bonshotels.DomainLayer.DomainModel.Hotel;
import com.bonshotels.Excepcions.HotelNoExisteix;

/**
 * La interficie ICtrlHotel sorgeix de l'aplicacio dels principis d'inversio de dependencies i
 * de segregacio d'interficies de la arquitectura orientada a objectes per tal d'aplicar el
 * principi de dependencies acicliques de l'arquitectura en paquets. En el cas de no tenir aquesta
 * interficie i utilitzar directament les seves realitzacions tindriem un dependencia ciclica entre
 * els paquets DomainLayer i DataLayer ja que DomainLayer utilitza DataLayer per accedir a les dades
 * pero el paquet DataLayer construeix objectes de DomainLayer i per tant dependrien ciclicament la
 * una de l'altra.
 * Aquesta classe es un producte abstracte dins del patro factoria abstracta.
 * @author Marc Mauri Alloza 
 */

public interface ICtrlHotel {

	/**
	 * Obte de la base d'informacio una instancia d'hotel amb nom hotel.
	 *
	 * @param hotel El nom de la instancia d'hotel que volem obtenir.
	 * @return L'hotel que volem obtenir.
	 * @throws HotelNoExisteix L' hotel no existeix.
	 */
	Hotel obte(String hotel) throws HotelNoExisteix;
	
	/**
	 * Prova si la instancia l'hotel amb nom hotel existeix a la base d'informacio.
	 *
	 * @param hotel El nom de la instancia d'hotel que volem comprovar si existeix a la base d'informacio.
	 * @return true, si existeix un a instancia d'hotel amb nom hotel a la base d'informacio.
	 */
	boolean existeix(String hotel);
	
	/**
	 * Obte totes les instancies d'hotel de la base d'informacio.
	 *
	 * @return Un Set d'instancies d'hotel.
	 */
	Set<Hotel> obteTots();
	
}
